import request from "@/utils/request";

// 分页列表查出来的单个的spu的值的数据类型限制
export interface SpuItemType {
    id?: number,
    spuName: string,   // 名称
    description: string,  // 描述
    category3Id: number,  // 第三级分类ID
    tmId: number,   // 当前所在的品牌id
    spuSaleAttrList: null | [],   // Spu销售属性值列表 //在分页列表的请求中,当前spu的拥有的销售属性是null,因为不需要展示
    spuImageList: null | []   // Spu图片列表 //在分页列表的请求中,当前spu的拥有的图片列表是null,因为不需要展示
}

// 分页列表查出来的所有的spu的值的数据类型组成的数组限制
export type SpuListType = SpuItemType[]

// 分页列表查询出来spu的整体的值的类型限制
export interface PaginationSpuInfoType {
    total: number,  // 总数
    size: number,   //  每页数量
    current: number  // 当前页
    searchCount: boolean,
    pages: number,  // 总页数
    records: SpuListType  // 询出来的所有的spu的值的数据类型组成的数组
}


// 1- 三级分类筛选完的 获取 Spu的列表数据
export const reqGetSpuListAsync = (page: number, limit: number, category3Id: number) => {
    return request.get<null, PaginationSpuInfoType>(`/admin/product/${page}/${limit}?category3Id=${category3Id}`)
}

// 新增或者修改的参数的类型限制
export interface SpuInfoType {
    category3Id: number, //所在的第三级分类id
    description: string, //当前新增的spu的描述
    id?: number,
    spuImageList: spuSaleImgListType | null, //当前spu的图片列表
    spuName: string, //当前的spu名称
    spuSaleAttrList: spuSaleAttrListType | null, //当前spu的销售属性列表
    tmId: number //当前所在的品牌id
}

// 2- 新增新的spu接口
export const reqAddSpuAsync = (spuInfo: SpuInfoType) => {
    return request.post<null, null>(`/admin/product/saveSpuInfo`, spuInfo);
};

// 3- 修改spu的接口
export const reqUpdateSpuAsync = (spuInfo: SpuInfoType) => {
    return request.post<null, null>(`/admin/product/updateSpuInfo`, spuInfo);
};

// 4- 删除的spu接口
export const reqDeleteSpuAsync = (spuId: number) => {
    return request.delete<null, null>(`/admin/product/deleteSpu/${spuId}`);
};

// 单个的Spu销售的属性值的限制
export interface spuSaleAttrValueItemType {
    baseSaleAttrId: number,  //当前销售属性值所在的销售属性的id  添加的时候后台不需要这个值
    id?: number, // 添加的时候后台不需要这个值
    isChecked: string,  //当前销售属性值是否是被选中状态  添加的时候后台不需要这个值
    saleAttrName: string, //所在的销售属性的名称
    saleAttrValueName: string, //所在的销售属性值的名称
    spuId?: number //当前销售属性所在的spu的id  添加的时候后台不需要这个值
}

// 整体的Spu销售的属性值列表数据的限制
export type spuSaleAttrValueListType = spuSaleAttrValueItemType[]

// 单个的Spu销售的属性的限制
export interface spuSaleAttrItemType {
    baseSaleAttrId: number, //当前销售属性在基础销售属性列表中的id
    id?: number,
    saleAttrName: string, //当前销售属性的名称
    spuId?: number,  //当前销售属性所在的spuId
    spuSaleAttrValueList: spuSaleAttrValueListType  //当前整体的Spu销售的属性值列表数据的限制
    isEdit?: boolean  // 添加属性值按钮和输入添加属性值输入框相互切换   添加额外属性 isEdit 控制  后续会剔除
    selectData?: string    // 添加额外属性  收集 用于收集默认图片
}

// 整体的Spu销售的属性列表的限制
export type spuSaleAttrListType = spuSaleAttrItemType[]

// 5- 根据spuId获取自己的销售属性列表
export const reqSaleAttrSelf = (spuId: number) => {
    return request.get<null, spuSaleAttrListType>(
        `/admin/product/spuSaleAttrList/${spuId}`
    );
};

// 单个的Spu销售的图片的限制
export interface spuSaleImgItemType {
    id?: number,
    spuId?: number,   // 添加在那个 spu值 的下面的 spuId
    imgName: string,  // 图片名
    imgUrl: string,   // 图片地址
    name?: string,   // 添加和修改的照片墙需要  后续剔除
    url?: string,    // 添加和修改的照片墙需要   后续剔除
    response?: any,    // 用于查看 是否是新添加的图片 后续剔除
    isDefault?: string   // 用于保存谁是 默认图片的 后续剔除
}

// 整个的Spu销售图片列表的限制
export type spuSaleImgListType = spuSaleImgItemType[]

// 6-  根据spuId获取ImgList列表
export const reqSpuImageList = (spuId: number) => {
    return request.get<null, spuSaleImgListType>(
        `/admin/product/spuImageList/${spuId}`
    );
}

// 限制设置的基础销售属性单个的类型
export interface baseSaleAttrItemType {
    id?: number;
    name: string;
}

// 限制设置的基础销售属性列表的类型
export type baseSaleAttrListType = baseSaleAttrItemType[];

// 7- 请求所有的销售属性组成的列表
export const reqBaseSaleAttrList = () => {
    return request.get<null, baseSaleAttrListType>(
        `/admin/product/baseSaleAttrList`
    );
};